package main
import "fmt"

func main() {
	//demo1 数组的声明
	// var a [2]string
	// a[0] = "hello"
	// a[1] = "world"
	// fmt.Println(a[0],a[1])//hello world
	// fmt.Println(a)//[hello world]

	// primes := [6]int{2, 3, 5, 7, 11, 13}
	// fmt.Println(primes)//[2 3 5 7 11 13]

	// fmt.Println("----------------------------")

	//demo2 切片
	// primes := [6]int{2, 3, 5, 7, 11, 13}
	// var s []int = primes[1:4]
	// fmt.Println(s)//[3 5 7]
	// p := primes[1:4]
	// p[0] = 33
	// //s-> [33 5 7]    p-> [33 5 7]    primes-> [2 33 5 7 11 13]
	// fmt.Println("s->",s,"   p->",p,"   primes->",primes)

	//demo3
	// s := []struct{ 
	// 	i int
	// 	b bool
	// }{
	// 	{2, true},
	// 	{3, true},
	// 	{5, false},
	// 	{7, false},
	// }
	// fmt.Println(s)//[{2 true} {3 true} {5 false} {7 false}]
	
	//demo4
	// t := []int{2, 3, 5, 7, 11, 13}
	// t = t[1:4]
	// fmt.Println(t)//[3 5 7]
	// t = t[:2]
	// fmt.Println(t)//[3 5]
	// t = t[1:]
	// fmt.Println(t)//[5]

	//demo5
	// t := []int{2, 3, 5, 7, 11, 13}
	// printSlice(t)//len=6 cap=6 [2 3 5 7 11 13]
	// //截取其长度为0
	// t = t[:0]
	// printSlice(t)//len=0 cap=6 []
	// //拓展其长度
	// t = t[:4]
	// printSlice(t)//len=4 cap=6 [2 3 5 7]
	// //舍弃前两个值
	// t = t[2:]
	// printSlice(t)//len=2 cap=4 [5 7]

	//demo6
	// var s []int
	// fmt.Println(s, len(s), cap(s))//[] 0 0
	// if s == nil {
	// 	fmt.Println("nil!")//nil!
	// }

	//demo7
	// a := make([]int, 5)
	// printSlice(a)//len=5 cap=5 [0 0 0 0 0]

	// b := make([]int, 0, 5)
	// printSlice(b)//len=0 cap=5 []

	// c := b[:2]
	// printSlice(c)//len=2 cap=5 [0 0]

	// d := c[2:5]
	// printSlice(d)//len=3 cap=3 [0 0 0]

	//demo8 向切片中追加元素
	// var s []int
	// s = append(s,0)
	// fmt.Println(s)//[0]

	// s = append(s,1,2)
	// fmt.Println(s)//[0 1 2]

	//demo9 range
	var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
	for i, v := range pow {
		//2**0 = 12**1 = 22**2 = 42**3 = 82**4 = 162**5 = 322**6 = 642**7 = 128%
		fmt.Printf("2**%d = %d",i ,v)
	}


}

func printSlice(s []int){
	fmt.Println("len=%d cap=%d %v\n",len(s), cap(s), s)
}